home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / defs.h < prev    next >
C/C++ Source or Header  |  1997-05-02  |  33KB  |  1,430 lines

  1. /* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */
  2. /* This file is the header file for all omega modules */
  3. /* defs.h */
  4.  
  5. /* omega will NOT function unless the implementor sets the appropriate
  6. definitions in the following section. */
  7.  
  8. /*--------------------------USER DEFINITIONS--------------------------*/
  9.  
  10. /* Implementor should uncomment the following if his system uses
  11. string.h instead of strings.h (try man string) */
  12.  
  13. #define STRING
  14.  
  15. /* Implementor should uncomment the following if random and srandom 
  16.    are not available  (try man random) */
  17.  
  18. #define NORANDOM
  19.  
  20. /* Implementor should uncomment the following if omega appears to
  21. redraw the screen excessively. */
  22.  
  23. #define EXCESSIVE_REDRAW
  24.  
  25. /* The following definition is recommended. Remove it only if you have
  26. huge amounts of disk space and are annoyed at waiting a few more seconds
  27. on save and restore. */
  28.  
  29. #define COMPRESS_SAVE_FILES
  30.  
  31. /* If your system has gzip, I recommend using it instead of compress */
  32. /* (try just typing 'gzip' at the shell prompt) */
  33.  
  34. /* #define USE_GZIP */
  35.  
  36. /* If your system doesn't have the usleep call, uncomment this line */
  37. /* (try man usleep) */
  38.  
  39. #define NO_USLEEP
  40.  
  41. /* OMEGALIB is where all the data files reside. 
  42.    Note the final / is necessary.
  43.    msdos note: \ is the C string escape character, so you need \\ in the
  44.    path given in OMEGALIB
  45.    This might usually be "/usr/games/lib/omegalib/", for unix,
  46.    or something like "c:\\games\\omega\\omegalib\\" for msdos */
  47.  
  48. #define OMEGALIB "PROGDIR:OmegaLib/"
  49.  
  50. /* Comment the following line out if you want users to be able to override */
  51. /* the OMEGALIB define, above, by setting the environment variable OMEGALIB */
  52. /* (I recommend leaving this line uncommented, unless you're compiling */
  53. /* for someone else and don't know where they'll be putting the omegalib */
  54. /* directory, as is the case with compiling executables for home computers. */
  55. /* It would be downright insecure to comment this line out in a multi-user */
  56. /* environment, especially if you're going to run omega setuid.) */
  57.  
  58. #define FIXED_OMEGALIB
  59.  
  60. /* set WIZARD to maintainers's username */
  61.  
  62. #define WIZARD "rendell"
  63.  
  64. /* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */
  65. /* dbx still intercepts the signals first, so it's ok for debugging */
  66.  
  67. #define CATCH_SIGNALS 1
  68.  
  69.  
  70. /*---------------------------SYSTEM DEFINITIONS---------------------------*/
  71.  
  72. /* Don't change anything from here on (unless you know what you're doing) */
  73. #define VERSION 80
  74. #define VERSIONSTRING "omega version 0.80 patch 2"
  75.  
  76. #ifndef AMIGA
  77. #ifndef MSDOS
  78. #ifndef BSD
  79. #ifndef SYSV
  80.     ERROR! - One of these should be set - edit the makefile appropriately
  81. #endif
  82. #endif
  83. #endif
  84. #endif
  85.  
  86. #if defined(MSDOS) && !defined(DJGPP)
  87. #define SAVE_LEVELS
  88. #endif
  89.  
  90. #ifdef COMPRESS_SAVE_FILES
  91. # ifdef USE_GZIP
  92. # define COMPRESSOR "gzip"
  93. # define UNCOMPRESSOR "gunzip"
  94. # define COMPRESS_EXT "gz"
  95. # define EXT_LENGTH 2
  96. # else
  97. # define COMPRESSOR "compress"
  98. # define UNCOMPRESSOR "uncompress"
  99. # define COMPRESS_EXT "Z"
  100. # define EXT_LENGTH 1
  101. # endif
  102. #endif
  103.  
  104. #define VACANT 0
  105. #define ABORT -1
  106. #define CASHVALUE -2
  107.  
  108. /* moderately arbitrary but probably cannot be easily changed */
  109. #define MAXWIDTH 64
  110. #define MAXLENGTH 64
  111. #define SMALLSCREENLENGTH 16
  112.  
  113. /* number of slots in inventory. Cannot be changed without work */
  114. #define MAXITEMS 16
  115.  
  116. /* number of slots in pack. Should be <= 26. */
  117. #define MAXPACK 26
  118.  
  119. /* number of items in pawn shop. Should be <= 26 */
  120. #define PAWNITEMS 10
  121.  
  122. /* number of lines back strings are recalled */
  123. #define STRING_BUFFER_SIZE 20
  124.  
  125. /* Verbosity levels */
  126. #define TERSE 0
  127. #define MEDIUM 1
  128. #define VERBOSE 2 
  129.  
  130. /* Arbitrary. Max of the levels in the dungeons */
  131. #define MAXLEVELS 21
  132.  
  133. /* levels in each dungeon */
  134. #define ASTRALLEVELS 5
  135. #define SEWERLEVELS 18
  136. #define CASTLELEVELS 16
  137. #define CAVELEVELS 10
  138. #define VOLCANOLEVELS 20
  139.  
  140. /* Overall Game Progress Vector Bits */
  141. /* Long had BETTER have at least 32 bits.... */
  142. #define SPOKE_TO_DRUID        0x1
  143. #define COMPLETED_CAVES        0x2
  144. #define COMPLETED_SEWERS    0x4
  145. #define COMPLETED_CASTLE    0x8
  146. #define COMPLETED_ASTRAL    0x10
  147. #define COMPLETED_VOLCANO    0x20
  148. #define KILLED_DRAGONLORD    0x40
  149. #define KILLED_EATER        0x80
  150. #define KILLED_LAWBRINGER    0x100
  151. #define COMPLETED_CHALLENGE    0x200
  152. #define SOLD_CONDO        0x400
  153. #define FAST_MOVE        0x800
  154. #define SKIP_PLAYER        0x1000
  155. #define SKIP_MONSTERS        0x2000
  156. #define MOUNTED            0x4000
  157. #define SUPPRESS_PRINTING    0x8000
  158. #define LOST            0x10000
  159. #define ARENA_MODE        0x20000
  160. #define CHEATED            0x40000
  161. #define BANK_BROKEN        0x80000
  162. #define CLUB_MEMBER        0x100000
  163. #define PREPARED_VOID        0x200000
  164. #define DESTROYED_ORDER        0x400000
  165. #define GAVE_STARGEM        0x800000
  166. #define ATTACKED_ORACLE        0x1000000
  167. #define UNDEAD_GUARDS        0x2000000
  168.  
  169. /* general environment types */
  170. #define E_NEVER_NEVER_LAND 0
  171. #define E_COUNTRYSIDE 1
  172. #define E_CITY 2
  173. #define E_VILLAGE 3
  174. #define E_TACTICAL_MAP 4
  175. #define E_SEWERS 5
  176. #define E_CASTLE 6
  177. #define E_CAVES 7
  178. #define E_VOLCANO 8
  179. #define E_ASTRAL 9
  180. #define E_ARENA 10
  181. #define E_HOVEL 11
  182. #define E_MANSION 12
  183. #define E_HOUSE 13
  184. #define E_DLAIR 14
  185. #define E_ABYSS 15
  186. #define E_STARPEAK 16
  187. #define E_MAGIC_ISLE 17
  188. #define E_TEMPLE 18
  189. #define E_CIRCLE 19
  190. #define E_COURT 20
  191. #define E_MAX E_COURT
  192.  
  193. /* player game status */
  194. #define DEAD 1
  195. #define QUIT 2
  196. #define WIN 3
  197. #define BIGWIN 4
  198.  
  199. /* kind of arbitrary */
  200. #define MAXROOMS 48
  201. #define MAXCONNECTIONS 4 
  202. #define STRING_LEN 100
  203.  
  204. /* some random characters */
  205. #define ESCAPE 27
  206. #define RETURN '\n'
  207. #define LINEFEED '\r'
  208. #define BACKSPACE '\b'
  209. #define DELETE 127
  210.  
  211.  
  212. /* tac mode action definitions */
  213. /* have to remember to find where these are used, mostly unused, now! */
  214. #define DISENGAGE 10
  215. #define BLOCK 20
  216. #define CUT 30
  217. #define THRUST 40
  218. #define MAGIC 50
  219. #define LUNGE 60
  220. #define RIPOSTE 70
  221. #define WIELD 80
  222. #define PICK_UP 90
  223.  
  224. /* as in attack low, block high, etc. */
  225. /* These values may be added to the ones above to get things like
  226.    block high, cut low, etc. CLEVER is only used by some monsters
  227.    to cheat with.... */
  228. #define LOW 1
  229. #define CENTER 2
  230. #define HIGH 3
  231. #define CLEVER 4
  232.  
  233.  
  234. /* weapon types */
  235. #define CUTTING 1
  236. #define THRUSTING 2
  237. #define STRIKING 3
  238. #define MISSILE 4
  239.  
  240. /* random aux constants */
  241. /* aux field for private residences in city */
  242. #define BURGLED 2
  243. #define LOCKED 3
  244. #define UNLOCKED 0
  245.  
  246. /* cannot use M command on site with this aux value */
  247. #define NOCITYMOVE 666
  248.  
  249. /* bow and crossbow object aux fields */
  250. #define LOADED 1
  251. #define UNLOADED 0
  252.  
  253. /* alignment used randomly throughout*/
  254. #define LAWFUL 1
  255. #define CHAOTIC 2
  256. #define NEUTRAL 3
  257.  
  258. /* spells */
  259. #define NUMSPELLS 41
  260.  
  261. #define S_MON_DET 0
  262. #define S_OBJ_DET 1
  263. #define S_MISSILE 2
  264. #define S_FIREBOLT 3
  265. #define S_TELEPORT 4
  266. #define S_LBALL 5
  267. #define S_SLEEP 6
  268. #define S_DISRUPT 7
  269. #define S_DISINTEGRATE 8
  270. #define S_POLYMORPH 9
  271. #define S_HEAL 10
  272. #define S_DISPEL 11
  273. #define S_IDENTIFY 12
  274. #define S_BREATHE 13
  275. #define S_INVISIBLE 14
  276. #define S_WARP 15
  277. #define S_ENCHANT 16
  278. #define S_BLESS 17
  279. #define S_RESTORE 18
  280. #define S_CURE 19
  281. #define S_TRUESIGHT 20
  282. #define S_HELLFIRE 21
  283. #define S_KNOWLEDGE 22
  284. #define S_HERO 23
  285. #define S_RETURN 24
  286. #define S_DESECRATE 25
  287. #define S_HASTE 26
  288. #define S_SUMMON 27
  289. #define S_SANCTUARY 28
  290. #define S_ACCURACY 29
  291. #define S_RITUAL 30
  292. #define S_FEAR 31
  293. #define S_APPORT 32
  294. #define S_SHADOWFORM 33
  295. #define S_ALERT 34
  296. #define S_REGENERATE 35
  297. #define S_SANCTIFY 36
  298. #define S_CLAIRVOYANCE 37
  299. #define S_DRAIN 38
  300. #define S_LEVITATE 39
  301. #define S_WISH 40
  302.  
  303. /* ranks in guilds, etc */
  304. #define NUMRANKS 9
  305.  
  306. #define LEGION 0
  307. #define ARENA 1
  308. #define COLLEGE 2
  309. #define THIEVES 3
  310. #define ORDER 4
  311. #define CIRCLE 5
  312. #define NOBILITY 6
  313. #define PRIESTHOOD 7
  314. #define ADEPT 8
  315.  
  316. #define LEGIONAIRE 1
  317. #define CENTURION 2
  318. #define FORCE_LEADER 3
  319. #define COLONEL 4
  320. #define COMMANDANT 5
  321.  
  322. #define TRAINEE 1
  323. #define BESTIARIUS 2
  324. #define RETIARIUS 3
  325. #define GLADIATOR 4
  326. #define CHAMPION 5
  327.  
  328. #define NOVICE 1
  329. #define STUDENT 2
  330. #define PRECEPTOR 3
  331. #define MAGE 4
  332. #define ARCHMAGE 5
  333.  
  334. #define TMEMBER 1
  335. #define ATHIEF 2
  336. #define THIEF 3
  337. #define TMASTER 4
  338. #define SHADOWLORD 5
  339.  
  340. #define GALLANT 1
  341. #define GUARDIAN 2
  342. #define CHEVALIER 3
  343. #define PALADIN 4
  344. #define JUSTICIAR 5
  345.  
  346. #define INITIATE 1
  347. #define ENCHANTER 2
  348. #define SORCEROR 3
  349. #define HIGHSORCEROR 4
  350. #define PRIME 5
  351.  
  352. #define COMMONER 1
  353. #define ESQUIRE 2
  354. #define KNIGHT 3
  355. #define LORD 4
  356. #define DUKE 5
  357.  
  358. #define LAY 1
  359. #define ACOLYTE 2
  360. #define PRIEST 3
  361. #define SPRIEST 4
  362. #define HIGHPRIEST 5
  363.  
  364. /* different priesthoods */
  365. #define ODIN 1
  366. #define SET 2
  367. #define ATHENA 3
  368. #define HECATE 4
  369. #define DRUID 5
  370. #define DESTINY 6
  371.  
  372.  
  373.  
  374. /* MONSTER STATUS/ABILITY BITS */
  375. #define AWAKE 1
  376. #define MOBILE 2
  377. #define HOSTILE 4
  378. #define WANDERING 16
  379. #define HUNGRY 32
  380. #define GREEDY 64
  381. #define NEEDY  128
  382. #define ONLYSWIM 256
  383. #define FLYING 512
  384. #define INTANGIBLE 1024
  385. #define M_INVISIBLE 2048
  386. #define SWIMMING 4096
  387. #define POISONOUS 8192
  388. #define EDIBLE 16384
  389.  
  390.  
  391. /* PLAYER STATUS INDICES */
  392. #define NUMSTATI 25
  393.  
  394. #define ACCURACY 0
  395. #define BLINDED 1
  396. #define SLOWED 2
  397. #define DISPLACED 3
  398. #define SLEPT 4
  399. #define DISEASED 5
  400. #define POISONED 6
  401. #define HASTED 7
  402. #define BREATHING 8
  403. #define INVISIBLE 9
  404. #define REGENERATING 10
  405. #define VULNERABLE 11
  406. #define BERSERK 12
  407. #define IMMOBILE 13
  408. #define ALERT 14
  409. #define AFRAID 15
  410. #define HERO 16
  411. #define LEVITATING 17
  412. #define ACCURATE 18
  413. #define TRUESIGHT 19
  414. #define SHADOWFORM 20
  415. #define ILLUMINATION 21
  416. #define DEFLECTION 22
  417. #define PROTECTION 23
  418. /* PROTECTION is deviant -- indicates protective value, not duration */
  419. #define RETURNING 24
  420. /* RETURNING is somewhat deviant--how many turns 'til RETURN spell goes off */
  421.  
  422. /* player immunity indices */
  423. /* also monster immunity bits (2^n) */
  424. /* also damage types */
  425. #define NUMIMMUNITIES 14
  426.  
  427. #define UNSTOPPABLE 0 
  428. #define NORMAL_DAMAGE 1
  429. #define FLAME 2
  430. #define COLD 3
  431. #define ELECTRICITY 4
  432. #define POISON 5
  433. #define ACID 6
  434. #define FEAR 7
  435. #define SLEEP 8
  436. #define NEGENERGY 9
  437. #define OTHER_MAGIC 10
  438. #define THEFT 11
  439. #define GAZE 12
  440. #define INFECTION 13
  441. #define EVERYTHING -1
  442.  
  443.  
  444. /* location lstatus bits */
  445. #define SEEN 1
  446. #define LIT 2
  447. #define SECRET 4
  448. #define STOPS 8
  449. #define CHANGED 16
  450.  
  451.  
  452. /* room string id */
  453. /* for use in roomname() */
  454. #define NUMROOMNAMES 30
  455.  
  456. /* normal room name indices start after the RS_ constants */
  457. #define ROOMBASE 39
  458. #define RS_COURT 38
  459. #define RS_ZORCH 37
  460. #define RS_CIRCLE 36
  461. #define RS_MAGIC_ISLE 35
  462. #define RS_STARPEAK 34
  463. #define RS_VOLCANO 33
  464. #define RS_HIGHASTRAL 32
  465. #define RS_FIREPLANE 31
  466. #define RS_AIRPLANE 30
  467. #define RS_WATERPLANE 29
  468. #define RS_EARTHPLANE 28
  469. #define RS_LOWERASTRAL 27
  470. #define RS_CLOSET 26
  471. #define RS_SECRETPASSAGE 25
  472. #define RS_DININGROOM 24
  473. #define RS_BATHROOM 23
  474. #define RS_BEDROOM 22
  475. #define RS_KITCHEN 21
  476. #define RS_DROWNED_SEWER 20
  477. #define RS_DRAINED_SEWER 19
  478. #define RS_SEWER_DUCT 18
  479. #define RS_ARENA 17
  480. #define RS_COUNTRYSIDE 16
  481. #define RS_DRUID 15
  482. #define RS_HECATE 14
  483. #define RS_ATHENA 13
  484. #define RS_SET 12
  485. #define RS_ODIN 11
  486. #define RS_DESTINY 10
  487. #define RS_ADEPT 9
  488. #define RS_WYRM 8
  489. #define RS_OCEAN 7 
  490. #define RS_PONDS 6
  491. #define RS_DRAGONLORD 5
  492. #define RS_GOBLINKING 4
  493. #define RS_CAVERN 3
  494. #define RS_CORRIDOR 2
  495. #define RS_WALLSPACE 1
  496.  
  497. #ifdef MSDOS
  498.  
  499. #define COL_BLACK 0x0000
  500. #define COL_BLUE 0x0100
  501. #define COL_GREEN 0x0200
  502. #define COL_CYAN 0x0300
  503. #define COL_RED 0x0400
  504. #define COL_PURPLE 0x0500
  505. #define COL_BROWN 0x0600
  506. #define COL_WHITE 0x0700
  507. #define COL_GREY 0x0800
  508. #define COL_LIGHT_BLUE 0x0900
  509. #define COL_LIGHT_GREEN 0x0a00
  510. #define COL_LIGHT_CYAN 0x0b00
  511. #define COL_LIGHT_RED 0x0c00
  512. #define COL_LIGHT_PURPLE 0x0d00
  513. #define COL_YELLOW 0x0e00
  514. #define COL_BRIGHT_WHITE 0x0f00
  515. #define COL_BG_BLACK 0x0000
  516. #define COL_BG_BLUE 0x1000
  517. #define COL_BG_GREEN 0x2000
  518. #define COL_BG_CYAN 0x3000
  519. #define COL_BG_RED 0x4000
  520. #define COL_BG_PURPLE 0x5000
  521. #define COL_BG_BROWN 0x6000
  522. #define COL_BG_WHITE 0x7000
  523. #define COL_FG_BLINK 0x8000
  524.  
  525. #else
  526. #ifdef AMIGA
  527.  
  528. #include "amiga.h"
  529.  
  530. #define COL_BLACK 0x0000
  531. #define COL_BLUE 0x0100
  532. #define COL_GREEN 0x0200
  533. #define COL_CYAN 0x0300
  534. #define COL_RED 0x0400
  535. #define COL_PURPLE 0x0500
  536. #define COL_BROWN 0x0600
  537. #define COL_WHITE 0x0700
  538. #define COL_GREY 0x0800
  539. #define COL_LIGHT_BLUE 0x0900
  540. #define COL_LIGHT_GREEN 0x0a00
  541. #define COL_LIGHT_CYAN 0x0b00
  542. #define COL_LIGHT_RED 0x0c00
  543. #define COL_LIGHT_PURPLE 0x0d00
  544. #define COL_YELLOW 0x0e00
  545. #define COL_BRIGHT_WHITE 0x0f00
  546. #define COL_BG_BLACK 0x0000
  547. #define COL_BG_BLUE 0x1000
  548. #define COL_BG_GREEN 0x2000
  549. #define COL_BG_CYAN 0x3000
  550. #define COL_BG_RED 0x4000
  551. #define COL_BG_PURPLE 0x5000
  552. #define COL_BG_BROWN 0x6000
  553. #define COL_BG_WHITE 0x7000
  554. #define COL_FG_BLINK 0x8000
  555.  
  556. #endif
  557. #endif
  558.  
  559. /* objects, locations, and terrain; characters to draw */
  560. #define NULL_ITEM '\0'
  561. #define SPACE (' ' | COL_WHITE)
  562. #define WALL ('#' | COL_GREY)
  563. #define PORTCULLIS ('7' | COL_WHITE)
  564. #define OPEN_DOOR ('|' | COL_BROWN)
  565. #define CLOSED_DOOR ('-' | COL_BROWN)
  566. #define WHIRLWIND ('6' | COL_LIGHT_BLUE)
  567. #define ABYSS ('0' | COL_BLACK | COL_BG_BROWN)
  568. #define VOID_CHAR (' ' | COL_WHITE)
  569. #define LAVA ('`' | COL_RED)
  570. #define HEDGE ('\"' | COL_GREEN)
  571. #define WATER ('~' | COL_BLUE)
  572. #define FIRE (';' | COL_LIGHT_RED)
  573. #define TRAP ('^' | COL_RED)
  574. #define LIFT ('_' | COL_BRIGHT_WHITE)
  575. #define STAIRS_UP ('<' | COL_WHITE)
  576. #define STAIRS_DOWN ('>' | COL_WHITE)
  577. #define FLOOR ('.' | COL_BROWN)
  578. #define PLAYER ('@' | COL_WHITE)
  579. #define CORPSE ('+' | COL_RED)
  580. #define STATUE ('1' | COL_GREY)
  581. #define RUBBLE ('4' | COL_GREY)
  582. #define ALTAR ('8' | COL_LIGHT_BLUE)
  583. #define CASH ('$' | COL_YELLOW)        /* various kinds of money */
  584. #define PILE ('*' | COL_BRIGHT_WHITE)    /* several objects in one place */
  585. #define FOOD ('%' | COL_BROWN)
  586. #define WEAPON (')' | COL_GREY)
  587. #define MISSILEWEAPON ('(' | COL_BROWN)
  588. #define SCROLL ('?' | COL_YELLOW)
  589. #define POTION ('!' | COL_LIGHT_GREEN)
  590. #define ARMOR (']' | COL_GREY)
  591. #define SHIELD ('[' | COL_BROWN)
  592. #define CLOAK ('}' | COL_CYAN)
  593. #define BOOTS ('{' | COL_BROWN)
  594. #define STICK ('/' | COL_BROWN)
  595.  
  596. #define RING ('=' | COL_YELLOW)
  597. #define THING ('\\' | COL_WHITE)
  598. #define ARTIFACT ('&' | COL_YELLOW)
  599.  
  600. /* TERRAIN TYPES */
  601. #define PLAINS ('-' | COL_LIGHT_GREEN)
  602. #define TUNDRA ('_' | COL_GREY)
  603. #define ROAD ('.' | COL_BROWN)
  604. #define MOUNTAINS ('^' | COL_GREY)
  605. #define PASS ('v' | COL_BROWN)
  606. #define RIVER ('~' | COL_BLUE)
  607. #define CITY ('O' | COL_WHITE)
  608. #define VILLAGE ('o' | COL_WHITE)
  609. #define FOREST ('(' | COL_LIGHT_GREEN)
  610. #define JUNGLE (')' | COL_GREEN)
  611. #define SWAMP ('=' | COL_GREEN)
  612. #define VOLCANO ('!' | COL_RED)
  613. #define CASTLE ('%' | COL_GREY)
  614. #define TEMPLE ('X' | COL_BROWN)
  615. #define CAVES ('*' | COL_BLACK | COL_BG_BROWN)
  616. #define DESERT ('\"' | COL_YELLOW)
  617. #define CHAOS_SEA ('+' | COL_LIGHT_PURPLE)
  618. #define STARPEAK ('|' | COL_LIGHT_BLUE)
  619. #define DRAGONLAIR ('$' | COL_BROWN)
  620. #define MAGIC_ISLE ('&' | COL_PURPLE)
  621.  
  622. #define CHAIR ('5' | COL_BROWN)
  623. #define SAFE ('3' | COL_GREY)
  624. #define FURNITURE ('2' | COL_BROWN)
  625. #define BED ('9' | COL_CYAN)
  626.  
  627. /* wow, all characters used! */
  628.  
  629.  
  630. /* total number of player options */
  631. #define NUMOPTIONS 11
  632.  
  633. /* number of options with TRUE/FALSE values */
  634. #define NUMTFOPTIONS 9
  635.  
  636. /* The slot number of the two options not in Player.options */
  637. #define VERBOSITY_LEVEL 10
  638. #define SEARCH_DURATION 11
  639.  
  640. /* Player.options bits */
  641. #define BELLICOSE 1 
  642. #define JUMPMOVE 2
  643. #define RUNSTOP 4
  644. #define PICKUP 8
  645. #define CONFIRM 16
  646. #define TOPINV 32
  647. #define PACKADD 64
  648. #define COMPRESS_OPTION 128
  649. #define SHOW_COLOUR 256
  650.  
  651. /* This has to be changed whenever an item is added */
  652. #define NUMSCROLLS 24
  653. #define NUMPOTIONS 18
  654. #define NUMFOODS 16
  655. #define NUMTHINGS 26
  656. #define NUMWEAPONS 41
  657. #define NUMARMOR 17
  658. #define NUMSHIELDS 8
  659. #define NUMCLOAKS 7
  660. #define NUMBOOTS 7
  661. #define NUMRINGS 10
  662. #define NUMSTICKS 17
  663. #define NUMARTIFACTS 24
  664.  
  665. /* running sum of itemtypes, for indexing into Objects array */
  666. #define THINGID 0 
  667. #define FOODID NUMTHINGS
  668. #define SCROLLID (FOODID + NUMFOODS)
  669. #define POTIONID (SCROLLID + NUMSCROLLS)
  670. #define WEAPONID (POTIONID + NUMPOTIONS)
  671. #define ARMORID (WEAPONID + NUMWEAPONS)
  672. #define SHIELDID (ARMORID + NUMARMOR)
  673. #define CLOAKID (SHIELDID + NUMSHIELDS)
  674. #define BOOTID (CLOAKID + NUMCLOAKS)
  675. #define RINGID (BOOTID + NUMBOOTS)
  676. #define STICKID (RINGID + NUMRINGS)
  677. #define ARTIFACTID (STICKID + NUMSTICKS)
  678. #define CASHID (ARTIFACTID+NUMARTIFACTS)
  679. /* Corpse's aux field is monster id */
  680. #define CORPSEID (CASHID+1)
  681.  
  682. #define TOTALITEMS (CORPSEID+1) 
  683.  
  684. /* describing unique items and monsters */
  685. #define COMMON 0
  686. #define UNIQUE_UNMADE 1
  687. #define UNIQUE_MADE 2
  688. #define UNIQUE_TAKEN 3
  689.  
  690. /* general item function id's */
  691. #define I_NO_OP 0
  692. #define I_NOTHING 1
  693.  
  694.   /* note some of these functions are for other types of items too */
  695.  
  696.     /* scroll functions */
  697. #define I_BLESS 101
  698. #define I_ACQUIRE 102
  699. #define I_ENCHANT 103
  700. #define I_TELEPORT 104
  701. #define I_WISH 105
  702. #define I_CLAIRVOYANCE 106
  703. #define I_DISPLACE 107
  704. #define I_ID 108
  705. #define I_FIREFLASH 109
  706. #define I_SPELLS 110
  707. #define I_JANE_T 111
  708. #define I_ALERT 112
  709. #define I_FLUX 113
  710. #define I_CHARGE 114
  711. #define I_WARP 115
  712. #define I_KNOWLEDGE 116
  713. #define I_LAW 117
  714. #define I_HINT 118
  715. #define I_HERO 119
  716. #define I_TRUESIGHT 120
  717. #define I_ILLUMINATE 121
  718. #define I_DEFLECT 122
  719.  
  720.     /* potion functions */
  721. #define I_HEAL 201
  722. #define I_OBJDET 202
  723. #define I_MONDET 203
  724. #define I_SLEEP_SELF 204
  725. #define I_RESTORE 205
  726. #define I_NEUTRALIZE_POISON 206
  727. #define I_SPEED 207
  728. #define I_AZOTH 208
  729. #define I_REGENERATE 210
  730. #define I_INVISIBLE 211
  731. #define I_BREATHING 212
  732. #define I_FEAR_RESIST 213
  733. #define I_AUGMENT 214
  734. #define I_CHAOS 215
  735. #define I_ACCURACY 216
  736. #define I_LEVITATION 217
  737. #define I_CURE 218
  738.  
  739.     /* stick functions */
  740. #define I_FIREBOLT 301
  741. #define I_LBOLT 302
  742. #define I_MISSILE 303
  743. #define I_SLEEP_OTHER 304
  744. #define I_FIREBALL 305
  745. #define I_LBALL 306
  746. #define I_SUMMON 307
  747. #define I_HIDE 308
  748. #define I_DISRUPT 309
  749. #define I_DISINTEGRATE 310
  750. #define I_SNOWBALL 311
  751. #define I_APPORT 312
  752. #define I_DISPEL 313
  753. #define I_POLYMORPH 314
  754. #define I_FEAR 315
  755.  
  756.     /* food functions */
  757. #define I_FOOD 401
  758. #define I_LEMBAS 402
  759. #define I_STIM 403
  760. #define I_POW 404
  761. #define I_IMMUNE 405
  762. #define I_POISON_FOOD 406
  763. #define I_CORPSE 407
  764. #define I_PEPPER_FOOD 408
  765. #define I_CANNIBAL 409
  766. #define I_INEDIBLE 410
  767.  
  768.     /* boots functions */
  769. #define I_PERM_SPEED 501
  770. #define I_PERM_HERO 502
  771. #define I_PERM_LEVITATE 503
  772. #define I_PERM_AGILITY 504
  773. #define I_BOOTS_JUMPING 505
  774. #define I_BOOTS_7LEAGUE 506
  775.  
  776.     /* cloak functions */
  777. #define I_PERM_DISPLACE 601
  778. #define I_PERM_NEGIMMUNE 602
  779. #define I_PERM_INVISIBLE 603
  780. #define I_PERM_ACCURACY 604
  781. #define I_PERM_PROTECTION 605
  782. #define I_PERM_TRUESIGHT 606
  783.  
  784.     /* ring functions */
  785. #define I_PERM_VISION 701
  786. #define I_PERM_BURDEN 702
  787. #define I_PERM_STRENGTH 703
  788. #define I_PERM_GAZE_IMMUNE 704
  789. #define I_PERM_FIRE_RESIST 705
  790. #define I_PERM_POISON_RESIST 706
  791. #define I_PERM_REGENERATE 707
  792. #define I_PERM_KNOWLEDGE 708
  793.  
  794.     /* armor functions */
  795. #define I_PERM_ENERGY_RESIST 801
  796. #define I_PERM_BREATHING 802
  797. #define I_PERM_FEAR_RESIST 803
  798. #define I_NORMAL_ARMOR 804
  799.  
  800. /* artifact functions */
  801. #define I_ORBFIRE 901
  802. #define I_ORBWATER 902
  803. #define I_ORBEARTH 903
  804. #define I_ORBAIR 904
  805. #define I_ORBMASTERY 905
  806. #define I_ORBDEAD 906
  807. #define I_CRYSTAL 907
  808. #define I_ANTIOCH 908
  809. #define I_KOLWYNIA 909
  810. #define I_DEATH 910
  811. #define I_ENCHANTMENT 911
  812. #define I_HELM 912
  813. #define I_LIFE 913
  814. #define I_JUGGERNAUT 914
  815. #define I_SYMBOL 915
  816. #define I_STARGEM 916
  817. #define I_SCEPTRE 917
  818. #define I_PLANES 918
  819.  
  820. /* weapons functions */
  821. #define I_NORMAL_WEAPON 1001
  822. #define I_LIGHTSABRE 1002
  823. #define I_DEMONBLADE 1003
  824. #define I_MACE_DISRUPT 1004
  825. #define I_TANGLE 1005
  826. #define I_ARROW 1006
  827. #define I_BOLT 1007
  828. #define I_VORPAL 1008
  829. #define I_DESECRATE 1009
  830. #define I_FIRESTAR 1010
  831. #define I_DEFEND 1011
  832. #define I_VICTRIX 1012
  833. #define I_EMPIRE 1013
  834. #define I_SCYTHE 1014
  835. #define I_ACIDWHIP 1015
  836.  
  837. /* thing functions */
  838. #define I_PICK 1101
  839. #define I_KEY 1102
  840. #define I_SHOVEL 1103 /* unused */
  841. #define I_EXCAVATOR 1104 /* unused */
  842. #define I_PERM_ILLUMINATE 1105
  843. #define I_TRAP 1106
  844. #define I_RAISE_PORTCULLIS 1107
  845.  
  846. /* shield functions */
  847. #define I_PERM_DEFLECT 1201
  848. #define I_NORMAL_SHIELD 1202
  849.  
  850. /* monster function ids */
  851. /* Its conceivable for a function of one type to be called when another
  852. would usually occur. A monster's special function may be an extra move,
  853. for example. */
  854.  
  855. #define M_NO_OP -1
  856.  
  857. /* talk functions */
  858. #define M_TALK_STUPID 101
  859. #define M_TALK_SILENT 102
  860. #define M_TALK_HUNGRY 103
  861. #define M_TALK_GREEDY 104
  862. #define M_TALK_TITTER 105
  863. #define M_TALK_MAN 106
  864. #define M_TALK_ROBOT 107
  865. #define M_TALK_EVIL 108
  866. #define M_TALK_BURBLE 109
  867. #define M_TALK_SLITHY 110
  868. #define M_TALK_MIMSY 111
  869. #define M_TALK_SEDUCTOR 112
  870. #define M_TALK_MP 113
  871. #define M_TALK_IM 114
  872. #define M_TALK_GUARD 115
  873. #define M_TALK_GHOST 116
  874. #define M_TALK_HINT 117
  875. #define M_TALK_BEG 118
  876. #define M_TALK_EF 119
  877. #define M_TALK_GF 120
  878. #define M_TALK_MORGON 121
  879. #define M_TALK_LB 122
  880. #define M_TALK_DEMONLOVER 123
  881. #define M_TALK_ASSASSIN 124
  882. #define M_TALK_NINJA 125
  883. #define M_TALK_THIEF 126
  884. #define M_TALK_MERCHANT 127
  885. #define M_TALK_HORSE 128
  886. #define M_TALK_PARROT 129
  887. #define M_TALK_ANIMAL 130
  888. #define M_TALK_HYENA 131
  889. #define M_TALK_SERVANT 132
  890. #define M_TALK_SCREAM 133
  891. #define M_TALK_DRUID 134
  892. #define M_TALK_ARCHMAGE 135
  893. #define M_TALK_PRIME 136
  894.  
  895. /* ability functions */
  896. #define M_SP_SURPRISE 201
  897. #define M_SP_MP 202
  898. #define M_SP_THIEF 203
  899. #define M_SP_AGGRAVATE 204
  900. #define M_SP_POISON_CLOUD 205
  901. #define M_SP_HUGE 206
  902. #define M_SP_SUMMON 207
  903. #define M_SP_ILLUSION 208
  904. #define M_SP_FLUTTER 209
  905. #define M_SP_ESCAPE 210
  906. #define M_SP_SPELL 211
  907. #define M_SP_EXPLODE 212
  908. #define M_SP_DEMON 213
  909. #define M_SP_ACID_CLOUD 214
  910. #define M_SP_WHIRL 215
  911. #define M_SP_GHOST 216
  912. #define M_SP_WHISTLEBLOWER 217
  913. #define M_SP_EATER 218
  914. #define M_SP_LAWBRINGER 219
  915. #define M_SP_DRAGONLORD 220
  916. #define M_SP_DE 221
  917. #define M_SP_DEMONLOVER 222
  918. #define M_SP_SEDUCTOR 223
  919. #define M_SP_MASTER 224
  920. #define M_SP_WYRM 225
  921. #define M_SP_BLACKOUT 226
  922. #define M_SP_BOG 227
  923. #define M_SP_MERCHANT 228
  924. #define M_SP_WERE 229
  925. #define M_SP_SERVANT 231
  926. #define M_SP_AV 232
  927. #define M_SP_LW 233
  928. #define M_SP_SWARM 234
  929. #define M_SP_ANGEL 235
  930. #define M_SP_MB 236
  931. #define M_SP_MIRROR 237
  932. #define M_SP_RAISE 238
  933. #define M_SP_DEATH 239
  934. #define M_SP_COURT 240
  935. #define M_SP_LAIR 241
  936. #define M_SP_PRIME 242
  937.  
  938. /* rangestrike functions */
  939. #define M_STRIKE_MISSILE 301
  940. #define M_STRIKE_FBOLT 302
  941. #define M_STRIKE_LBALL 303
  942. #define M_STRIKE_FBALL 304
  943. #define M_STRIKE_BLIND 305
  944. #define M_STRIKE_SNOWBALL 306
  945. #define M_STRIKE_MASTER 307
  946. #define M_STRIKE_SONIC 308
  947.  
  948. /* combat functions */
  949. #define M_MELEE_NORMAL 401
  950. #define M_MELEE_FIRE 402
  951. #define M_MELEE_DRAGON 403
  952. #define M_MELEE_MP 404
  953. #define M_MELEE_ELEC 405
  954. #define M_MELEE_POISON 406
  955. #define M_MELEE_NG 407
  956. #define M_MELEE_SUCCUBUS 408
  957. #define M_MELEE_SPIRIT 409
  958. #define M_MELEE_DISEASE 410
  959. #define M_MELEE_SLEEP 411
  960. #define M_MELEE_COLD 412
  961. #define M_MELEE_MASTER 413
  962. #define M_MELEE_GRAPPLE 414
  963. #define M_MELEE_DEATH 415
  964.  
  965. /* movement functions */
  966. #define M_MOVE_NORMAL 501
  967. #define M_MOVE_FLUTTER 502
  968. #define M_MOVE_TELEPORT 503
  969. #define M_MOVE_FOLLOW 504
  970. #define M_MOVE_RANDOM 505
  971. #define M_MOVE_SMART 506
  972. #define M_MOVE_SPIRIT 507
  973. #define M_MOVE_SCAREDY 508
  974. #define M_MOVE_CONFUSED 509
  975. #define M_MOVE_ANIMAL 510
  976. #define M_MOVE_LEASH 230
  977.  
  978. /* MLx -> index to Monsters starting for level x */
  979. /* MLx -> number of monsters of level x or less */
  980. /* NML_x -> number of monsters of level x */
  981. /* NML-X must be changed whenever a monster is added */
  982. #define ML0 0
  983. #define NML_0 9
  984. #define ML1 (ML0 + NML_0)
  985. #define NML_1 22
  986. #define ML2 (ML1 + NML_1)
  987. #define NML_2 14
  988. #define ML3 (ML2 + NML_2)
  989. #define NML_3 15
  990. #define ML4 (ML3 + NML_3)
  991. #define NML_4 18
  992. #define ML5 (ML4 + NML_4)
  993. #define NML_5 14
  994. #define ML6 (ML5 + NML_5)
  995. #define NML_6 13
  996. #define ML7 (ML6 + NML_6)
  997. #define NML_7 15
  998. #define ML8 (ML7 + NML_7)
  999. #define NML_8 12
  1000. #define ML9 (ML8 + NML_8)
  1001. #define NML_9 8
  1002. #define ML10 (ML9 + NML_9)
  1003. #define NML_10 10
  1004.  
  1005. #define NUMMONSTERS (ML10 + NML_10)
  1006.  
  1007. /* Some monster ID's : (Those that are explicitly named in code) */
  1008. /* Actually, there are still many magic constants floating around. */
  1009. /* Eventually I'll get around to making each monster's id a constant.... */
  1010. #define RANDOM -1
  1011. #define NPC (ML0+4)
  1012. #define HISCORE_NPC (ML0+8)
  1013. #define BUNNY (ML0+5)
  1014. #define BLACKSNAKE (ML1+14)
  1015. #define HAWK (ML1+13)
  1016. #define IMPALA (ML1+19)
  1017. #define WOLF (ML2+10)
  1018. #define LION (ML3+8)
  1019. #define BRIGAND (ML3+9)
  1020. #define QUAIL (ML1+11)
  1021. #define BADGER (ML1+12)
  1022. #define DEER (ML1+14)
  1023. #define BEAR (ML3+10)
  1024. #define ANTEATER (ML1+16)
  1025. #define PARROT (ML1+20)
  1026. #define MAMBA (ML3+11)
  1027. #define ANT (ML2+11)
  1028. #define HYENA (ML1+21)
  1029. #define ELEPHANT (ML2+12)
  1030. #define TROUT (ML1+18)
  1031. #define BASS (ML1+19)
  1032. #define MANOWAR (ML3+12)
  1033. #define CROC (ML4+8)
  1034. #define BOGTHING (ML5+8)
  1035. #define CAMEL (ML1+15)
  1036. #define SHEEP (ML0+5)
  1037. #define GHOST (ML2+6)
  1038. #define HAUNT (ML4+5)
  1039. #define SPECTRE (ML5+5)
  1040. #define LICHE (ML6+5)
  1041. #define HORSE (ML2+13)
  1042.  
  1043.  
  1044. /* location functions */
  1045. #define L_NO_OP 0
  1046.  
  1047. /* random sites */
  1048. #define L_LIFT 1
  1049. #define L_BALANCESTONE 2
  1050. #define L_FIRE 3
  1051. #define L_WHIRLWIND 4
  1052. #define L_VOIDSTONE 5
  1053. #define L_WARNING 6
  1054. #define L_ARENA_EXIT 7
  1055. #define L_HOUSE_EXIT 8
  1056. #define L_SAFE 9
  1057.  
  1058. /* city level shop and guild functions */
  1059. /* following are those in CitySiteList */
  1060. #define NUMCITYSITES 27
  1061. #define CITYSITEBASE 10
  1062. #define L_CHARITY 10
  1063. #define L_ARMORER 11
  1064. #define L_CLUB 12
  1065. #define L_GYM 13
  1066. #define L_THIEVES_GUILD 14
  1067. #define L_COLLEGE 15
  1068. #define L_HEALER 16
  1069. #define L_CASINO 17
  1070. #define L_TAVERN 18
  1071. #define L_MERC_GUILD 19
  1072. #define L_ALCHEMIST 20
  1073. #define L_SORCERORS 21
  1074. #define L_CASTLE 22
  1075. #define L_ARENA 23
  1076. #define L_DPW 24
  1077. #define L_LIBRARY 25
  1078. #define L_PAWN_SHOP 26
  1079. #define L_BANK 27
  1080. #define L_CONDO 28
  1081. #define L_ORACLE 29
  1082. #define L_ORDER 30
  1083. #define L_DINER 31
  1084. #define L_COMMANDANT 32
  1085. #define L_CRAP 33
  1086. #define L_TEMPLE 34
  1087. #define L_COUNTRYSIDE 35
  1088. #define L_BROTHEL 36
  1089. /* end of city sites */
  1090.  
  1091. /* random sites */
  1092. #define L_JAIL 37
  1093. #define L_TEMPLE_WARNING 38
  1094. #define L_LAWSTONE 39
  1095. #define L_CHAOSTONE 40
  1096.  
  1097. /* final abyss sites ignore levitation*/
  1098. #define L_EARTH_STATION 41
  1099. #define L_FIRE_STATION 42
  1100. #define L_WATER_STATION 43
  1101. #define L_AIR_STATION 44
  1102. #define L_VOID_STATION 45
  1103. #define L_VOID 46
  1104. #define L_VOICE1 47
  1105. #define L_VOICE2 48
  1106. #define L_VOICE3 49
  1107.  
  1108. #define L_SACRIFICESTONE 50
  1109.  
  1110. /* circle hq sites */
  1111. #define L_TOME1 51
  1112. #define L_TOME2 52
  1113. #define L_ENTER_CIRCLE 53
  1114. #define L_CIRCLE_LIBRARY 54
  1115.  
  1116. /* other site functions */
  1117. #define L_DRUID 55
  1118. #define L_ALTAR 56
  1119.  
  1120. #define L_GARDEN 57
  1121. #define L_ADEPT 58
  1122. #define L_SEWER 59
  1123.  
  1124. #define L_OMEGA 60
  1125. #define L_CARTOGRAPHER 61
  1126. #define L_STABLES 62
  1127. #define L_COMMONS 63
  1128. #define L_GRANARY 64
  1129. #define L_MAZE 65
  1130. #define L_HOVEL 66
  1131. #define L_HOUSE 67
  1132. #define L_MANSION 68
  1133. #define L_OCCUPIED_HOUSE 69
  1134. #define L_TACTICAL_EXIT 70
  1135. #define L_VAULT 71
  1136. #define L_CEMETARY 72
  1137. #define L_THRONE 73
  1138. #define L_ESCALATOR 74
  1139. #define L_ENTER_COURT 75
  1140.  
  1141. #define L_TRIFID 76
  1142. #define L_FINAL_ABYSS 77
  1143. #define L_RAISE_PORTCULLIS 78
  1144.  
  1145. #define L_MINDSTONE 79
  1146.  
  1147. /* above LEVITATION_AVOIDANCE, no effect if player is levitating */
  1148. #define LEVITATION_AVOIDANCE 80
  1149.  
  1150. /* random sites */
  1151. #define L_CHAOS 81
  1152. #define L_WATER 82
  1153. #define L_LAVA 83
  1154. #define L_MAGIC_POOL 84
  1155. #define L_PORTCULLIS_TRAP 85
  1156. #define L_DROP_EVERY_PORTCULLIS 87
  1157. #define L_PORTCULLIS 88
  1158.  
  1159.  
  1160. /* traps */
  1161. #define NUMTRAPS 13
  1162. #define TRAP_BASE 89
  1163.  
  1164. /* traps */
  1165. #define L_TRAP_DART 89
  1166. #define L_TRAP_PIT 90
  1167. #define L_TRAP_DOOR 91
  1168. #define L_TRAP_SNARE 92
  1169. #define L_TRAP_BLADE 93
  1170. #define L_TRAP_FIRE 94
  1171. #define L_TRAP_TELEPORT 95
  1172. #define L_TRAP_DISINTEGRATE 96
  1173. #define L_TRAP_SLEEP_GAS 97
  1174. #define L_TRAP_ACID 98
  1175. #define L_TRAP_MANADRAIN 99
  1176. #define L_TRAP_ABYSS 100
  1177. #define L_TRAP_SIREN 101
  1178.  
  1179. /* more random sites */
  1180. #define L_STATUE_WAKE 102
  1181. #define L_STATUE_RANDOM 103
  1182.  
  1183. #define L_HEDGE 104
  1184. #define L_RUBBLE 105
  1185.  
  1186. #define L_ABYSS 106
  1187.  
  1188. /* player possession slots */
  1189. /* slot 0 should not be filled when out of inventory_control() */
  1190.  
  1191. #define O_UP_IN_AIR 0
  1192. #define O_READY_HAND 1
  1193. #define O_WEAPON_HAND 2
  1194. #define O_LEFT_SHOULDER 3
  1195. #define O_RIGHT_SHOULDER 4
  1196. #define O_BELT1 5
  1197. #define O_BELT2 6
  1198. #define O_BELT3 7
  1199. #define O_SHIELD 8 
  1200. #define O_ARMOR 9
  1201. #define O_BOOTS 10
  1202. #define O_CLOAK 11
  1203. #define O_RING1 12
  1204. #define O_RING2 13
  1205. #define O_RING3 14
  1206. #define O_RING4 15
  1207.  
  1208. /* structure definitions */
  1209.  
  1210. struct room {
  1211.   int lighted; 
  1212.   int left,right,top,bottom;
  1213.   int rsi; /* index into roomname switch */
  1214. };
  1215.  
  1216.  
  1217.  
  1218. struct spell {
  1219.   char known;
  1220.   char id;
  1221.   char powerdrain;
  1222. } ;
  1223.  
  1224.  
  1225. struct monster {
  1226.   struct objectlist *possessions;
  1227.   unsigned char attacked;
  1228.   int aux1,aux2,x,y,click;
  1229.   int id,hp,hit,ac,dmg,sense,wakeup,level,speed;
  1230.   unsigned char sleep,treasure;
  1231.   long xpv;
  1232.   int corpseweight,corpsevalue,transformid,startthing;
  1233.   unsigned char uniqueness;
  1234.   int talkf,movef,meleef,strikef,specialf;
  1235.   long status,immunity;
  1236.   short monchar;
  1237.   char *monstring,*corpsestr,*meleestr;
  1238. };
  1239.  
  1240.  
  1241. struct monsterlist {
  1242.   struct monster *m;
  1243.   struct monsterlist *next;
  1244. };
  1245.  
  1246.  
  1247.  
  1248.  
  1249. struct player {
  1250.   int str,con,dex,agi,iq,pow,maxstr,maxcon,maxdex,maxagi,maxiq,maxpow;
  1251.   long xp;
  1252.   int level,hp,maxhp,hit,dmg,absorption,speed,click;
  1253.   int defense,food,alignment;
  1254.   long mana,maxmana;
  1255.   long cash;
  1256.   int patron,birthday;
  1257.   char preference;
  1258.   int sx,sy; /* sanctuary coordinates */
  1259.   int x,y; /* current player coordinates */
  1260.   int itemweight,maxweight;
  1261.   int immunity[NUMIMMUNITIES];
  1262.   int status[NUMSTATI];
  1263.   long options;
  1264.   int rank[NUMRANKS];
  1265.   long guildxp[NUMRANKS];
  1266.   char name[64];
  1267.   char meleestr[64];
  1268.   struct object *possessions[MAXITEMS];
  1269.   struct object *pack[MAXPACK];
  1270.   int packptr;
  1271. };
  1272.  
  1273. struct object {
  1274.   int id,weight,plus,charge,dmg,hit,aux,number,fragility;
  1275.   long basevalue;
  1276.   unsigned char known,used;
  1277.   int blessing;
  1278.   unsigned char type,uniqueness;
  1279.   int usef;
  1280.   unsigned char level;
  1281.   short objchar;
  1282.   char *objstr,*truename,*cursestr;
  1283. };
  1284.  
  1285.  
  1286.  
  1287. struct objectlist {
  1288.   struct object *thing;
  1289.   struct objectlist *next;
  1290. };
  1291.  
  1292.  
  1293.  
  1294. /* terrain locations */
  1295. struct terrain {
  1296.   short base_terrain_type;
  1297.   short current_terrain_type;
  1298.   char aux;
  1299.   char status;
  1300. };
  1301.  
  1302. /* dungeon locations */
  1303. struct location {
  1304.   char p_locf; /* function executed when moved on */
  1305.   unsigned char lstatus; /* seen,stopsrun,lit,secret, */
  1306.   char roomnumber; /* so room can be named */
  1307.   short locchar; /* terrain type */
  1308.   short showchar; /*char instantaneously drawn for site */
  1309.   int aux; /* signifies various things */
  1310.   unsigned char buildaux; /* used in constructing level */
  1311.   struct objectlist *things; 
  1312.   struct monster *creature;
  1313.  };
  1314.  
  1315.  
  1316. struct level {
  1317.   char depth; /* which level is this */
  1318.   struct level *next; /* pointer to next level in dungeon */
  1319. #ifndef SAVE_LEVELS
  1320.   struct location site[MAXWIDTH][MAXLENGTH]; /* dungeon data */
  1321. #else
  1322.   /* Over 64K worth of data! */
  1323.   struct location *site[MAXWIDTH]; /* dungeon data */
  1324. #endif
  1325.   char generated; /* has the level been made (visited) yet? */
  1326.   char numrooms; /* number of rooms on level */
  1327.   char tunnelled; /* amount of tunnelling done on this level */
  1328.   struct monsterlist *mlist; /* List of monsters on level */
  1329.   int environment; /* where kind of level is this? */
  1330.   int last_visited; /* time player was last on this level */
  1331. };
  1332.  
  1333.  
  1334. /* random typedef's */
  1335.  
  1336. typedef struct monsterlist mltype;
  1337. typedef mltype *pml;
  1338.  
  1339. typedef struct monster montype;
  1340. typedef montype *pmt;
  1341.  
  1342. typedef struct location loctype;
  1343. typedef loctype *plc;
  1344.  
  1345. typedef struct level levtype;
  1346. typedef levtype *plv;
  1347.  
  1348. typedef struct object objtype;
  1349. typedef objtype *pob;
  1350.  
  1351. typedef struct objectlist oltype;
  1352. typedef oltype *pol;
  1353.  
  1354. /* random  function declarations from system libraries */
  1355.  
  1356. #include <stdlib.h>
  1357.  
  1358. #ifdef MSDOS
  1359. #include <time.h>
  1360. #define getlogin() "pcuser"
  1361. #endif
  1362.  
  1363. #undef sign
  1364. #undef max
  1365. #undef min
  1366. #undef abs
  1367. /* These must be made to work for both longs and ints */
  1368. #define sign(n) (((n) < 0) ? -1 : (((n) > 0) ? 1 : 0))
  1369. #define max(a,b) (((a) > (b)) ? (a) : (b))
  1370. #define min(a,b) (((a) < (b)) ? (a) : (b))
  1371. #define abs(n) (((n) < 0) ? (-(n)) : (n))
  1372.  
  1373. #ifdef NORANDOM
  1374. #define RANDFUNCTION rand()
  1375. #define SRANDFUNCTION srand((int)(Seed))
  1376. #endif
  1377.  
  1378. #ifndef NORANDOM
  1379. #define RANDFUNCTION random()
  1380. #define SRANDFUNCTION srandom((int)(Seed))
  1381. #endif
  1382.  
  1383.  
  1384. #define pow2(n) (1 << (n))
  1385.  
  1386. /* these bit operations were functions, but are faster as macros... */
  1387.  
  1388. #define loc_statusp(x,y,stat) ((Level->site[x][y].lstatus&(stat))?1:0)
  1389. #define lset(x,y,stat) (Level->site[x][y].lstatus |= (stat))
  1390. #define lreset(x,y,stat) (Level->site[x][y].lstatus &= ~(stat))
  1391.  
  1392. #define c_statusp(x,y,stat) ((Country[x][y].status&(stat))?1:0)
  1393. #define c_set(x,y,stat) (Country[x][y].status |= (stat))
  1394. #define c_reset(x,y,stat) (Country[x][y].status &= ~(stat))
  1395.  
  1396. #define m_statusp(m,s) (((m)->status&(s))?1:0)
  1397. #define m_status_set(m,s) ((m)->status |= (s))
  1398. #define m_status_reset(m,s) ((m)->status &= ~(s))
  1399. #define m_immunityp(m,s) (((m)->immunity&pow2(s))?1:0)
  1400.  
  1401. #define gamestatusp(flag) ((GameStatus&(flag))?1:0)
  1402. #define setgamestatus(flag) (GameStatus |= (flag))
  1403. #define resetgamestatus(flag) (GameStatus &= ~(flag))
  1404.  
  1405. #define optionp(o) ((Player.options&(o))?1:0)
  1406. #define optionset(o) (Player.options |= (o))
  1407. #define optionreset(o) (Player.options &= ~(o))
  1408.  
  1409. /* systemV for some reason uses string.h instead of strings.h */
  1410. /* Also, random and srandom are unlikely to be found on system V... */
  1411.  
  1412. #ifdef STRING
  1413. #include <string.h>
  1414. #endif
  1415.  
  1416. #ifndef STRING
  1417. #include <strings.h>
  1418. #endif
  1419.  
  1420. #include <stdio.h>
  1421.  
  1422. #ifndef TRUE
  1423. #define TRUE 1
  1424. #define FALSE 0
  1425. #endif
  1426.  
  1427. #ifdef SAVE_LEVELS
  1428. plv msdos_changelevel();
  1429. #endif
  1430.